def is_prime(num):
    """判断一个数是否为素数（优化版）"""
    if num <= 1:
        return False
    # 2是唯一的偶素数，单独判断
    if num == 2:
        return True
    # 偶数直接排除（除2外）
    if num % 2 == 0:
        return False
    # 只需判断到根号num（减少循环次数）
    for i in range(3, int(num**0.5) + 1, 2):
        if num % i == 0:
            return False
    return True

def find_primes_in_range(M, N):
    """找出[M,N]区间内的所有素数，返回素数列表、个数、总和"""
    primes = []
    for num in range(M, N + 1):
        if is_prime(num):
            primes.append(num)
    count = len(primes)
    total = sum(primes)
    return primes, count, total

# 主程序：获取输入+处理+输出
if __name__ == "__main__":
    # 输入验证：确保M和N是整数，且M<=N
    while True:
        try:
            M = int(input("请输入区间起始整数M："))
            N = int(input("请输入区间结束整数N："))
            if M > N:
                print("错误：起始数M不能大于结束数N，请重新输入！")
                continue
            break
        except ValueError:
            print("错误：请输入有效的整数！")
    
    # 计算结果
    prime_list, prime_count, prime_sum = find_primes_in_range(M, N)
    
    # 输出结果
    if prime_list:
        # 素数列表转字符串（逗号分隔）
        prime_str = ",".join(map(str, prime_list))
        print(f"\n区间[{M},{N}]内的所有素数：{prime_str}")
    else:
        print(f"\n区间[{M},{N}]内没有素数！")
    
    print(f"素数个数：{prime_count}")
    print(f"所有素数之和：{prime_sum}")